package br.com.afi.util.managerEmail;

import java.io.File;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;

/**
 * E-mail
 * 
 * @author André de Fontana Ignacio
 * @version 1.0
 */
public class Email
{
	public static final String HTML = "text/html;charset=iso-8859-1;";
	public static final RecipientType TO = RecipientType.TO;
	public static final RecipientType CC = RecipientType.CC;
	public static final RecipientType BCC = RecipientType.BCC;
	private String assunto;
	private String conteudo;
	private InternetAddress remetente;
	private Map<String, File> anexos = new HashMap<String, File>();
	private File anexoConteudo;
	private List<InternetAddress> destinatarios = new LinkedList<InternetAddress>();
	private List<RecipientType> tipoDests = new LinkedList<RecipientType>();
	private String mimeType;

	/**
	 * Construtor
	 */
	public Email()
	{
		super();
	}

	/**
	 * Adiciona um destinatário
	 * 
	 * @param destinatario Destinatário
	 * @param tipoDest Tipo do destinatário
	 */
	public void addDestinatario( InternetAddress destinatario, RecipientType tipoDest )
	{
		this.destinatarios.add( destinatario );
		this.tipoDests.add( tipoDest );
	}

	/**
	 * Adiciona um anexo a mensagem.
	 * 
	 * @param file Arquivo de anexo
	 */
	public void addAnexo( File file )
	{
		this.anexos.put( file.getName(), file );
	}

	/**
	 * Adiciona um anexo a mensagem.
	 * 
	 * @param fileName Nome do arquivo de anexo
	 * @param file Arquivo de anexo
	 */
	public void addAnexo( String fileName, File file )
	{
		this.anexos.put( fileName, file );
	}

	/**
	 * Obtém os anexos, a key dos anexos é o nome do arquivo, o valor é o próprio arquivo.
	 * 
	 * @return Anexos
	 */
	protected Map<String, File> getAnexos()
	{
		return anexos;
	}

	public List<InternetAddress> getDestinatarios()
	{
		return destinatarios;
	}

	public List<RecipientType> getTipoDests()
	{
		return tipoDests;
	}

	public void setMimeType( String mimeType )
	{
		this.mimeType = mimeType;
	}

	public String getMimeType()
	{
		return mimeType;
	}

	public void setRemetente( InternetAddress remetente )
	{
		this.remetente = remetente;
	}

	public InternetAddress getRemetente()
	{
		return remetente;
	}

	public void setAssunto( String assunto )
	{
		this.assunto = assunto;
	}

	public String getAssunto()
	{
		return assunto;
	}

	public void setConteudo( String conteudo )
	{
		this.conteudo = conteudo;
		this.anexoConteudo = null;
	}

	public void setAnexoConteudo( File anexoConteudo )
	{
		this.conteudo = "";
		this.anexoConteudo = anexoConteudo;
	}

	public File getAnexoConteudo()
	{
		return anexoConteudo;
	}

	public String getConteudo()
	{
		return conteudo;
	}
}
